﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AngularStart1.Models;
using Raven.Client;

namespace TodoApi.Data
{
    public class RavenDbRepository : ITodoRepository
    {
        private IDocumentStore _ravenDbDocumentStore;
        private IDocumentSession _Session;

        public RavenDbRepository()
        {
            _ravenDbDocumentStore = RavenDocumentStore.InitialiseDocumentStore();
            _Session = _ravenDbDocumentStore.OpenSession();
        }

        public Todo Get(int id)
        {
            return _Session.Load<Todo>(id);
        }

        public Todo Add(AngularStart1.Models.Todo todo)
        {
            _Session.Store(todo);
            _Session.SaveChanges();
            return todo;
        }

        public void Remove(int id)
        {
            var todo = _Session.Load<Todo>(id);
            _Session.Delete(todo);
            _Session.SaveChanges();
        }

        public void Complete(int id)
        {
            throw new NotImplementedException();
        }

        public List<Todo> List()
        {
            var todos = _Session.Query<Todo>().ToList();
            return todos;
        }

        public Todo Update(Todo todo)
        {
            var todoToUpdate = _Session.Load<Todo>(todo.Id);
            todoToUpdate.Description = todo.Description;
            todoToUpdate.Completed = todo.Completed;
            _Session.SaveChanges();
            return todoToUpdate;
        }
    }
}